#pragma once

#include <iostream>
#include <vector>
#include <sstream>
#include <io.h>
#include <sys/stat.h>

#include "include/curl/curl.h"

// @brief 回调函数，用于写入下载的数据
size_t WriteData(void* _ptr, size_t _size, size_t _nmemb, FILE* _stream);

class FTPTools
{
public:
	FTPTools(const std::string& _ftpUrl,const std::string& _ftpUserName,const std::string& _ftpPassword);
	~FTPTools();

	// @brief 上传文件
	// @param _ftpFilePath ftp服务器文件路径，如果不存在自动创建文件
	// @param _localFilePath 本地文件路径
	// return true上传成功 false上传失败
	bool UploadFile(const std::string& _ftpFilePath, const std::string& _localFilePath);

	// @brief 下载文件
	// @param _ftpFilePath ftp服务器文件路径，如果不存在自动创建文件
	// @param _localFilePath 本地文件路径
	// return true上传成功 false上传失败
	bool DownloadFile(const std::string& _ftpFilePath, const std::string& _localFilePath);

	/// @brief 获取ftp所有文件名称，包括递归子目录下
	/// @param _result 结果集合
	/// @param _dirPath ftp服务器下的目录路径
	void GetAllFileList(std::vector<std::string> &_result,const std::string& _dirPath);

private:

	std::string ftpUrl_;
	std::string ftpUserName_;
	std::string ftpPassword_;
};

